package com.ttg.common.component;


import com.ttg.common.utils.sm.AsymmetricKey;

import java.security.NoSuchAlgorithmException;

public interface CryptoUtils {


    /**
     * 摘要算法
     *
     * @param msg 消息
     * @return
     */
    String messageDigest(String msg);

    /**
     * 对称解密 + hex2byte
     *
     * @param descyptStr 待解密字符串
     * @param key        密钥
     * @return
     * @throws Exception
     */
    String decrypt(String descyptStr, String key) throws Exception;

    /**
     * 对称加密 + byte2hex
     *
     * @param encryptStr 待加密字符串
     * @param key        密钥
     * @return
     * @throws Exception
     */
    String encrypt(String encryptStr, String key) throws Exception;


    /**
     * 非对称 私钥解密 + hex2byte
     *
     * @param descyptStr    密文（hex串）
     * @param privateKeyStr 私钥
     * @return
     * @throws Exception
     */
    String decryptByPrivateKey(String descyptStr, String privateKeyStr) throws Exception;

    /**
     * 非对称 公钥加密
     *
     * @param encryptStr   明文
     * @param publicKeyStr 公钥
     * @return
     * @throws Exception
     */
    String encryptByPublicKey(String encryptStr, String publicKeyStr) throws Exception;


    /**
     * 非对称 私钥加密 + hex2byte
     *
     * @param encryptStr    明文
     * @param privateKeyStr 私钥
     * @return
     * @throws Exception
     */
    String encryptByPrivateKey(String encryptStr, String privateKeyStr) throws Exception;

    /**
     * 非对称 公钥解密
     *
     * @param descyptStr   密文（hex串）
     * @param publicKeyStr 公钥
     * @return
     * @throws Exception
     */
    String decryptByPublicKey(String descyptStr, String publicKeyStr) throws Exception;

    /**
     * 私钥签名
     *
     * @param sourceStr     待签串
     * @param privateKeyStr 私钥
     * @return
     * @throws Exception
     */
    String signByPrivateKey(String sourceStr, String privateKeyStr) throws Exception;

    /**
     * 公钥验证
     *
     * @param signStr      签名
     * @param sourceStr    验证字段
     * @param publicKeyStr 公钥
     * @return
     * @throws Exception
     */
    boolean verifyByPublicKey(String signStr, String sourceStr, String publicKeyStr) throws Exception;

    /**
     * 生成 对称加密的密钥
     *
     * @return
     */
    String genSymmetricKey();


    /**
     * 默认
     *
     * @return
     */
    AsymmetricKey genAsymmetricKey() throws NoSuchAlgorithmException;


}
